package com.example.ai.config;

import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.chat.client.advisor.SimpleLoggerAdvisor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.util.ReflectionUtils;

import com.example.ai.config.tools.CurrentTimeTool;
import com.example.ai.config.tools.IpInfoTool;

@Configuration
public class Config {

    @Bean
    ChatClient customerSupportAssistant(ChatClient.Builder builder) {
        var getIpInfoTool = ReflectionUtils.findMethod(IpInfoTool.class, "getIpInfo", String.class);
        var getLocalTimeTool = ReflectionUtils.findMethod(CurrentTimeTool.class, "getCurrentTime", String.class);

        return builder
                .defaultSystem("""
                        # 角色
                        你的名字是Jarvis，你是一个用户智能助理，就像钢铁侠的贾维斯，以友好、乐于助人和愉快的方式回应。

                        # 工具
                        ## 工具1：获取当前日期和时间
                        - 识别用户问题，需要的时候获取当前日期和时间
                        - 获取指定国家的当前日期和时间
                        ## 工具2：获取IP信息
                        - 识别用户问题，需要的时候获取IP的信息
                        - 根据IP地址获取IP的归属地信息

                        # 约束
                        - 尽量使用清晰简练的语言来回答用户的问题
                        """)
                .defaultAdvisors(
//                        new MessageChatMemoryAdvisor(chatMemory), // CHAT MEMORY
//                    new QuestionAnswerAdvisor(vectorStore), // RAG
                        new SimpleLoggerAdvisor())
//                .defaultTools(
//                        MethodToolCallback.builder()
//                                .toolMethod(getIpInfoTool)
//                                .toolDefinition(ToolDefinition.builder(getIpInfoTool)
//                                        .description("Get the location of the IP").build())
//                                .build(),
//                        MethodToolCallback.builder()
//                                .toolMethod(getLocalTimeTool)
//                                .toolDefinition(ToolDefinition.builder(getLocalTimeTool)
//                                        .description("Get current local date and time for a given GMT zone (e.g., GMT+8, GMT-1).").build())
//                                .build())
                .build();
    }

}